package org.csu.canteen.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.csu.canteen.vo.ItemVO;

import java.math.BigDecimal;
import java.util.*;

@Data
@TableName("cart")
public class Cart {
    @TableId(value = "userid")
    private String userId;

    @TableField(value = "itemid")
    private String itemId;

    private Integer quantity;


    @TableField(exist = false) // 非数据库字段
    private final Map<String, CartItem> itemMap = Collections.synchronizedMap(new HashMap<>());
    @TableField(exist = false) // 非数据库字段
    private final List<CartItem> itemList = new ArrayList<>();

    // 获取购物车中的所有商品项
    public List<CartItem> getCartItemList() {
        return itemList;
    }

    // 获取购物车中的商品数量
    public int getNumberOfItems() {
        return itemList.size();
    }

    // 检查购物车中是否包含某个商品
    public boolean containsItemId(String itemId) {
        return itemMap.containsKey(itemId);
    }

    // 根据 itemId 获取指定的 CartItem
    public CartItem getCartItemByItemId(String itemId) {
        return itemMap.get(itemId);
    }

    // 添加商品到购物车
    public void addItem(Item item, boolean isInStock) {
        CartItem cartItem = itemMap.get(item.getItemId());
        if (cartItem == null) {
            cartItem = new CartItem();
            cartItem.setItem(item);
            cartItem.setNumber(0);
            cartItem.setInStock(isInStock);
            itemMap.put(item.getItemId(), cartItem);
            itemList.add(cartItem);
        }
        cartItem.incrementQuantity();
    }

    // 根据 itemId 移除商品
    public Item removeItemById(String itemId) {
        CartItem cartItem = itemMap.remove(itemId);
        if (cartItem != null) {
            itemList.remove(cartItem);
            return cartItem.getItem();
        }
        return null;
    }

    // 增加某个商品的数量
    public void incrementQuantityByItemId(String itemId) {
        CartItem cartItem = itemMap.get(itemId);
        if (cartItem != null) {
            cartItem.incrementQuantity();
        }
    }

    // 设置某个商品的数量
    public void setQuantityByItemId(String itemId, int quantity) {
        CartItem cartItem = itemMap.get(itemId);
        if (cartItem != null) {
            cartItem.setNumber(quantity);
        }
    }

    // 计算购物车中所有商品的总价
    public BigDecimal getSubTotal() {
        BigDecimal subTotal = BigDecimal.ZERO;
        for (CartItem cartItem : itemList) {
            Item item = cartItem.getItem();
            BigDecimal listPrice = item.getListPrice();
            BigDecimal quantity = new BigDecimal(cartItem.getNumber());
            subTotal = subTotal.add(listPrice.multiply(quantity));
        }
        return subTotal;
    }


}
